Graphical user interfaces typically employ some form of a window manager to organize and render windows. Window managers commonly utilize a window tree to organize windows, their child windows, and other objects to be displayed within the window such as buttons, menus, etc. To display the windows on a display screen, a window manager parses the window tree and renders the windows and other objects in memory. The memory can then be displayed on a video screen. A window manager may also be responsible for “hit-testing” input to determine the window in which input was received. For instance, when a user moves a mouse cursor into a window and mouse “clicks,” the window manager must determine the window in which the click was made and generate a message to that window.
Current window managers suffer from a number of drawbacks that limit their ability to manage a large number of windows and to perform advanced functions. For instance, current window managers suffer from severe performance limitations when rendering thousands of windows, children, or other objects. Moreover, these performance limitations impede current window managers from supporting advanced functions on windows, such as alpha-blending, rendering composition, and world-transforms, such as scaling and rotation of sub-trees of the window tree.
Therefore, in light of the above, there is a need for a method and apparatus for rendering a window tree that is optimized to manage a large number of windows and child window objects. There is a further need for a method and apparatus for rendering a window tree that allows advanced functions, such as world-transforms, to be applied to sub-trees of the window tree without an impact on system performance.